//package com.ruoyi.common.core.aop;
//
//
//import com.ruoyi.common.core.annotation.MyCache;
//import com.ruoyi.common.core.service.Redisaaaa;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.concurrent.TimeUnit;
///**
// * @Author: tjk
// * @Date: 2025/2/27
// * @Description:处理分布式缓存添加功能
// **/
//@Aspect
//@Component
//@Slf4j
//public class MyCacheAop {
//
//
//    @Resource
//    private Redisaaaa redisService;
//
//    /**
//     * 定义切点
//     */
//    @Pointcut("@annotation(myCache)")
//    public void pointCut(MyCache myCache) {
//    }
//
//    /**
//     * 环绕通知
//     */
//
//    @Around("pointCut(myCache)")
//    public Object around(ProceedingJoinPoint joinPoint, MyCache myCache) {
////        // 获取注解参数
//        String key = myCache.key();
////        // 获取注解参数
//        int time = myCache.time();
//        /**
//         * 思路：
//         * 1、拼装redis中存缓存的key值
//         * 2、看redis中是否存在该key
//         * 3、如果存在，直接取出来返回即可，不需要执行目标方法了
//         * 4、如果不存在，就执行目标方法，然后将缓存放一份到redis中
//         */
//        // 获取注解参数
//        String methodPath = joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName();
//        Object result;
//        if (redisService.exists(key)) {
////            log.info("访问接口：[{}]，直接从缓存获取数据", methodPath);
//            log.info("访问接口：[{}]，直接从缓存获取数据", key);
//            return redisService.getCacheList(key);
//        }
//        try {
//            //调用 joinPoint.proceed() 触发目标方法的执行，并将返回值存储在 result 变量中。
//            result = joinPoint.proceed();
//            //接口异常结果存Redis
//            redisService.setCacheObject(key, result, time, TimeUnit.SECONDS);
//            log.info("访问接口：[{}]，返回值存入缓存成功", methodPath);
//        } catch (Throwable e) {
//            log.error("发生异常:{}", e);
//            throw new RuntimeException(e);
//        }
//        return result;
//    }
//}
//
